home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / CUGUK / UTIL_SRC / C016.ZIP / CALC / INIT.C < prev    next >
Text File  |  1990-01-19  |  2KB  |  95 lines

  1. /* $Author: jkcohen $
  2.  * $Source: /mnt1/h/jkcohen/Source/C/Hoc/RCS/init.c,v $
  3.  * $Revision: 1.1 $ ; $Date: 87/03/16 21:18:20 $
  4.  * $State: Stab $
  5. */
  6.  
  7. #include "su.h"
  8. #include "jc.h"
  9. #include "hoc.h"
  10. #include "ytab.h"
  11.  
  12. extern double    Sqrt(), Tan(), Asin(), Acos(), Atan2(),
  13.         Exp(), Log(), Log10(), Pow(), Sinh(), Cosh(),
  14.         Gamma(), Jn(), Y0(), Y1(), Yn(), Srand(), Rand(), integer();
  15. static struct {        /* Constants */
  16.     char    *name;
  17.     double    cval;
  18. } consts[] = {
  19.     "PI",      3.14159265358979323846,
  20.     "E",      2.71828182845904523536,
  21.     "GAMMA",  0.57721566490153286060,  /* Euler */
  22.     "DEG",   57.29577951308232087680,  /* deg/radian */
  23.     "PHI",    1.61803398874989484820,  /* golden */
  24.     0,      0
  25. };
  26. static struct {        /* Built-ins */
  27.     char    *name;
  28.     double (*func)();
  29. } bltins[] = {
  30.     "abs",        fabs,
  31.     "floor",    floor,
  32.     "ceil",        ceil,
  33.     "sqrt",        Sqrt,    /* checks argument */
  34.     "sin",        sin,
  35.     "cos",        cos,
  36.     "tan",        Tan,    /* checks argument */
  37.     "asin",        Asin,    /* checks argument */
  38.     "acos",        Acos,    /* checks argument */
  39.     "atan",        atan,
  40.     "exp",        Exp,    /* checks argument */
  41.     "log",        Log,    /* checks argument */
  42.     "log10",    Log10,    /* checks argument */
  43.     "sinh",        Sinh,    /* checks argument */
  44.     "cosh",        Cosh,    /* checks argument */
  45.     "tanh",        tanh,
  46.     "gamma",    Gamma,    /* checks argument */
  47.     "j0",        j0,
  48.     "j1",        j1,
  49.     "y0",        Y0,    /* checks argument */
  50.     "y1",        Y1,    /* checks argument */
  51.     "srand",    Srand,    /* converts to double */
  52.     "int",        integer,
  53.     0,        0
  54. };
  55. static struct {        /* Built-ins with 2 args */
  56.     char    *name;
  57.     double (*func)();
  58. } bltins2[] = {
  59.     "hypot",     hypot,
  60.     "atan2",    Atan2,    /* checks arguments */
  61.     "pow",        Pow,    /* checks arguments */
  62.     "jn",        Jn,    /* converts first arg to single */
  63.     "yn",        Yn,    /* checks arguments */
  64.     0,        0
  65. };
  66. static struct {        /* Built-ins with 0 args */
  67.     char    *name;
  68.     double (*func)();
  69. } bltins0[] = {
  70.     "rand",        Rand,    /* convert to double */
  71.     0,        0
  72. };
  73.  
  74. init()    /* install constants and built-ins in table */
  75. Begin
  76.     register int i;
  77.     register Symbol *s;
  78.  
  79.     For i = 0; consts[i].name; i++ Do
  80.         install(consts[i].name, CON, consts[i].cval);
  81.     Endfor
  82.     For i = 0; bltins[i].name; i++ Do
  83.         s = install(bltins[i].name, BLTIN, 0.0);
  84.         s->u.ptr = bltins[i].func;
  85.     Endfor
  86.     For i = 0; bltins2[i].name; i++ Do
  87.         s = install(bltins2[i].name, BLTIN2, 0.0);
  88.         s->u.ptr = bltins2[i].func;
  89.     Endfor
  90.     For i = 0; bltins0[i].name; i++ Do
  91.         s = install(bltins0[i].name, BLTIN0, 0.0);
  92.         s->u.ptr = bltins0[i].func;
  93.     Endfor
  94. End
  95.